/* 
 * File:   Integer.h
 * Author: Gab'z
 *
 * Created on 29 mai 2012, 12:26
 */

#ifndef INTEGER_H
#define	INTEGER_H

#include "SimpleNumber.h"

namespace calculator {
    // class Rationnal;
    // class Real;

    class Integer : public SimpleNumber {
        friend class Rationnal;
        friend class Real;

    public:
        Integer(int x);
        Integer(const Integer& orig);
        virtual ~Integer();
        Integer* clone() const;

        std::string toString() const;
        double value() const;

        Integer& operator=(const Integer& integer);
        Integer& operator+=(const Integer& integer);
        Integer& operator-=(const Integer& integer);
        Integer& operator*=(const Integer& integer);
        Integer& operator/=(const Integer& integer);
        Integer& operator%=(const Integer& integer);
        Integer& pow(const unsigned int& n);

    private:
        int _x;
    };
    Integer operator+(const Integer& i1, const Integer& i2);
    Integer operator-(const Integer& i1, const Integer& i2);
    Integer operator*(const Integer& i1, const Integer& i2);
    Integer operator/(const Integer& i1, const Integer& i2);
    Integer operator%(const Integer& i1, const Integer& i2);
    Integer pow(const Integer& integer, const unsigned int& n);
}

#endif	/* INTEGER_H */

